package com.zx.serviceribbon;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * @Description Spring cloud有两种服务调用方式，
 * 一种是ribbon+restTemplate，另一种是feign。
 * 本项目基于ribbon+restTemplate。
 * ribbon是一个负载均衡客户端，
 * 可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。
 * @Author Zhang Xin
 * @Date 2020/7/22
 */
@SpringBootApplication
//通过@EnableDiscoveryClient向服务中心注册
@EnableEurekaClient
@EnableDiscoveryClient
//开启Hystrix断路器
@EnableHystrix
public class ServiceRibbonApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceRibbonApplication.class, args);
    }

    /**
     * restTemplate 通过@LoadBalanced注解表明这个restRemplate bean开启负载均衡的功能
     * @Param: []
     * @Return: org.springframework.web.client.RestTemplate
     */
    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

}
